package net.intellect.collectpro.objects;

import java.util.Date;

import net.intellect.collectpro.util.Constantes;
import net.intellect.collectpro.util.Parametros;
import net.intellect.collectpro.util.Util;

import com.sforce.soap.enterprise.sobject.Llamada__c;

public class Llamada {

	public static final int PESO_LIBERACION = 0;
	public static final int PESO_ATRASO = 1;
	public static final int PESO_PNC = 2;
	public static final int PESO_CPA = 3;
	public static final int PESO_PRO = 4;
	public static final int PESO_POP = 5;
	public static final int PESO_CSP = 6;
	public static final int PESO_DEFAULT = 7;
	
	private Llamada__c llamada__c = null;
	private int indiceLlamada = 0;
	private String codigoResultado = "";
	private Date fechaAgendada = null;
	private int score = 0;
	
	public Llamada(Llamada__c llamada__c) {
		this.llamada__c = llamada__c;
		
		//Calcula el numero de llamada de acuerdo al nombre
		try {
			this.indiceLlamada = Util.obtenerNumLlamada(this.llamada__c.getName());
			this.codigoResultado = this.llamada__c.getCobro__r().getUltimo_Codigo_Resultado__c();
			this.fechaAgendada = this.llamada__c.getFecha_Agendada__c();
			this.score = (int)this.llamada__c.getInfo_Cuenta__r().getScore__c();
		} catch (Exception e) {			
		}
		 
	}
	
	public Llamada__c getLlamada__c() {
		return llamada__c;
	}
	public void setLlamada__c(Llamada__c llamada__c) {
		this.llamada__c = llamada__c;
	}
	public int getIndiceLlamada() {
		return indiceLlamada;
	}
	public void setIndiceLlamada(int indiceLlamada) {
		this.indiceLlamada = indiceLlamada;
	}

	public String getCodigoResultado() {
		return codigoResultado;
	}

	public void setCodigoResultado(String codigoResultado) {
		this.codigoResultado = codigoResultado;
	}

	public Date getFechaAgendada() {
		return fechaAgendada;
	}

	public void setFechaAgendada(Date fechaAgendada) {
		this.fechaAgendada = fechaAgendada;
	}
	
	public int getPeso() {
		if (indiceLlamada==1) return PESO_LIBERACION; //Liberacion
		if (fechaAgendada!=null && fechaAgendada.compareTo(Util.obtenerFechaSinHora(new Date()))<0) return PESO_ATRASO; //Atrasos  
		if (codigoResultado!=null) {
			if (codigoResultado.equals(Constantes.LLAMADA_PROMESA_NO_CUMPLIDA)) return PESO_PNC;
			if (codigoResultado.equals(Constantes.LLAMADA_CPA)) return PESO_CPA;
			if (codigoResultado.equals(Constantes.LLAMADA_PROMESA)) return PESO_PRO;
			if (codigoResultado.equals(Constantes.LLAMADA_PROMESA_POSTERGACION)) return PESO_POP;
			if (codigoResultado.equals(Constantes.LLAMADA_CLIENTE_SIN_PROMESA)) return PESO_CSP;
		}
		
		return PESO_DEFAULT;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}
	
	public double getPagoContadoConsolidado() {
		if (llamada__c.getCobro__r()==null) return 0;
		if (!Double.isNaN(llamada__c.getCobro__r().getTC_Pago_Contado_Local__c()) && !Double.isNaN(llamada__c.getCobro__r().getTC_Pago_Contado_USD__c())) {
			return llamada__c.getCobro__r().getTC_Pago_Contado_Local__c() + llamada__c.getCobro__r().getTC_Pago_Contado_USD__c() * Parametros.TIPO_CAMBIO;
		} else {
			if (!Double.isNaN(llamada__c.getCobro__r().getTC_Pago_Contado_Local__c()) && Double.isNaN(llamada__c.getCobro__r().getTC_Pago_Contado_USD__c())) {
				return llamada__c.getCobro__r().getTC_Pago_Contado_Local__c();
			}
			if (Double.isNaN(llamada__c.getCobro__r().getTC_Pago_Contado_Local__c()) && !Double.isNaN(llamada__c.getCobro__r().getTC_Pago_Contado_USD__c())) {
				return llamada__c.getCobro__r().getTC_Pago_Contado_USD__c() * Parametros.TIPO_CAMBIO;
			}			
		}
		return 0;
	}	
	
}
